﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace RaisingStudio.Data.Linq
{
    public static class IExpressionDataExtension
    {
        public static IEnumerable<T> Query<T>(this IExpressionData expressionData)
        {
            return expressionData.DataContext.Query<T>(expressionData);
        }

        public static IEnumerable<T> Query<T>(this IExpressionData expressionData, int startRecord, int maxRecords)
        {
            return expressionData.DataContext.Query<T>(expressionData, startRecord, maxRecords);
        }

        public static List<T> QueryForList<T>(this IExpressionData expressionData)
        {
            return expressionData.DataContext.QueryForList<T>(expressionData);
        }

        public static List<T> QueryForList<T>(this IExpressionData expressionData, int startRecord, int maxRecords)
        {
            return expressionData.DataContext.QueryForList<T>(expressionData, startRecord, maxRecords);
        }

        public static System.Data.DataTable QueryForDataTable<T>(this IExpressionData expressionData)
        {
            return expressionData.DataContext.QueryForDataTable<T>(expressionData);
        }

        public static System.Data.DataTable QueryForDataTable<T>(this IExpressionData expressionData, int startRecord, int maxRecords)
        {
            return expressionData.DataContext.QueryForDataTable<T>(expressionData, startRecord, maxRecords);
        }


        public static int GetCount<T>(this IExpressionData expressionData)
        {
            return expressionData.DataContext.GetCount<T>(expressionData);
        }


        public static object GetSum<T>(this IExpressionData expressionData)
        {
            return expressionData.DataContext.GetSum<T>(expressionData);
        }

        public static object GetAvg<T>(this IExpressionData expressionData)
        {
            return expressionData.DataContext.GetAvg<T>(expressionData);
        }

        public static object GetMax<T>(this IExpressionData expressionData)
        {
            return expressionData.DataContext.GetMax<T>(expressionData);
        }

        public static object GetMin<T>(this IExpressionData expressionData)
        {
            return expressionData.DataContext.GetMin<T>(expressionData);
        }
        
        public static S GetSum<T, S>(this IExpressionData expressionData)
        {
            return expressionData.DataContext.GetSum<T, S>(expressionData);
        }

        public static S GetAvg<T, S>(this IExpressionData expressionData)
        {
            return expressionData.DataContext.GetAvg<T, S>(expressionData);
        }

        public static S GetMax<T, S>(this IExpressionData expressionData)
        {
            return expressionData.DataContext.GetMax<T, S>(expressionData);
        }

        public static S GetMin<T, S>(this IExpressionData expressionData)
        {
            return expressionData.DataContext.GetMin<T, S>(expressionData);
        }


        public static T GetData<T>(this IExpressionData expressionData)
        {
            return QueryForSingle<T>(expressionData);
        }
        public static T QueryForSingle<T>(this IExpressionData expressionData)
        {
            return expressionData.DataContext.QueryForSingle<T>(expressionData);
        }


        public static int Delete<T>(this IExpressionData expressionData)
        {
            return DeleteByQuery<T>(expressionData);
        }
        public static int DeleteByQuery<T>(this IExpressionData expressionData)
        {
            return expressionData.DataContext.DeleteByQuery<T>(expressionData);
        }

        public static bool Exists<T>(this IExpressionData expressionData)
        {
            return ExistsByQuery<T>(expressionData);
        }
        public static bool ExistsByQuery<T>(this IExpressionData expressionData)
        {
            return expressionData.DataContext.ExistsByQuery<T>(expressionData);
        }

        public static int Update<T>(this IExpressionData expressionData, T dataObject)
        {
            return UpdateByQuery<T>(expressionData, dataObject);
        }
        public static int UpdateByQuery<T>(this IExpressionData expressionData, T dataObject)
        {
            return expressionData.DataContext.UpdateByQuery<T>(dataObject, expressionData);
        }




        public static IEnumerable<T> Query<T>(this IExpressionData<T> expressionData)
        {
            return expressionData.DataContext.Query<T>(expressionData);
        }

        public static IEnumerable<T> Query<T>(this IExpressionData<T> expressionData, int startRecord, int maxRecords)
        {
            return expressionData.DataContext.Query<T>(expressionData, startRecord, maxRecords);
        }

        public static List<T> QueryForList<T>(this IExpressionData<T> expressionData)
        {
            return expressionData.DataContext.QueryForList<T>(expressionData);
        }

        public static List<T> QueryForList<T>(this IExpressionData<T> expressionData, int startRecord, int maxRecords)
        {
            return expressionData.DataContext.QueryForList<T>(expressionData, startRecord, maxRecords);
        }

        public static System.Data.DataTable QueryForDataTable<T>(this IExpressionData<T> expressionData)
        {
            return expressionData.DataContext.QueryForDataTable<T>(expressionData);
        }

        public static System.Data.DataTable QueryForDataTable<T>(this IExpressionData<T> expressionData, int startRecord, int maxRecords)
        {
            return expressionData.DataContext.QueryForDataTable<T>(expressionData, startRecord, maxRecords);
        }


        public static int GetCount<T>(this IExpressionData<T> expressionData)
        {
            return expressionData.DataContext.GetCount<T>(expressionData);
        }


        public static object GetSum<T>(this IExpressionData<T> expressionData)
        {
            return expressionData.DataContext.GetSum<T>(expressionData);
        }
                
        public static object GetAvg<T>(this IExpressionData<T> expressionData)
        {
            return expressionData.DataContext.GetAvg<T>(expressionData);
        }

        public static object GetMax<T>(this IExpressionData<T> expressionData)
        {
            return expressionData.DataContext.GetMax<T>(expressionData);
        }

        public static object GetMin<T>(this IExpressionData<T> expressionData)
        {
            return expressionData.DataContext.GetMin<T>(expressionData);
        }

        public static S GetSum<T, S>(this IExpressionData<T> expressionData)
        {
            return expressionData.DataContext.GetSum<T, S>(expressionData);
        }
                
        public static S GetAvg<T, S>(this IExpressionData<T> expressionData)
        {
            return expressionData.DataContext.GetAvg<T, S>(expressionData);
        }

        public static S GetMax<T, S>(this IExpressionData<T> expressionData)
        {
            return expressionData.DataContext.GetMax<T, S>(expressionData);
        }

        public static S GetMin<T, S>(this IExpressionData<T> expressionData)
        {
            return expressionData.DataContext.GetMin<T, S>(expressionData);
        }


        public static T GetData<T>(this IExpressionData<T> expressionData)
        {
            return QueryForSingle<T>(expressionData);
        }
        public static T QueryForSingle<T>(this IExpressionData<T> expressionData)
        {
            return expressionData.DataContext.QueryForSingle<T>(expressionData);
        }


        public static int Delete<T>(this IExpressionData<T> expressionData)
        {
            return DeleteByQuery<T>(expressionData);
        }
        public static int DeleteByQuery<T>(this IExpressionData<T> expressionData)
        {
            return expressionData.DataContext.DeleteByQuery<T>(expressionData);
        }

        public static bool Exists<T>(this IExpressionData<T> expressionData)
        {
            return ExistsByQuery<T>(expressionData);
        }
        public static bool ExistsByQuery<T>(this IExpressionData<T> expressionData)
        {
            return expressionData.DataContext.ExistsByQuery<T>(expressionData);
        }

        public static int Update<T>(this IExpressionData<T> expressionData, T dataObject)
        {
            return UpdateByQuery<T>(expressionData, dataObject);
        }
        public static int UpdateByQuery<T>(this IExpressionData<T> expressionData, T dataObject)
        {
            return expressionData.DataContext.UpdateByQuery<T>(dataObject, expressionData);
        }
    }
}
